package com.nado.extensions.reload;

/**
 * 파일을 통해 발생하는 {@link Reloadable} 타입을 사용하는 경우 내부적으로 생성되는 파일 정보 클래스.
 * <p/>
 * {@link AbstractFileReloadable}에서 관리하며, 주기적으로 파일의 last access time을 검사하여
 * 내용의 변경 여부를 조사한다.
 *
 */
public class ReloadableFile {

	/**
	 * 디렉터리를 가진 파일명
	 */
	protected String fullPath;

	/**
	 * fullPath의 변형 값
	 */
	protected String name;

	/**
	 * 파일의 classpath 존재 여부
	 */
	protected boolean classPath = false;

	/**
	 * 파일의 최종 수정 시간
	 */
	protected long lastModified;

	/**
	 * 파일 정보를 생성한다.
	 *
	 * @param fullPath	 디렉터리를 포함한 파일명
	 * @param lastModified 파일의 최종 수정 시간
	 * @param classPath	파일의 classpath 존재 여부
	 */
	public ReloadableFile(String fullPath, long lastModified, boolean classPath) {
		this.fullPath = fullPath;
		this.name = fullPath;
		this.classPath = classPath;
		this.lastModified = lastModified;
	}

	/**
	 * 디렉터리를 포함한 파일명을 반환한다.
	 */
	public String getFullPath() {
		return this.fullPath;
	}

	/**
	 * 디렉터리를 포함한 파일명을 설정한다.
	 */
	public void setFullPath(String fullPath) {
		this.fullPath = fullPath;
	}

	/**
	 * fullPath의 변형 값을 반환한다.
	 */
	public String getName() {
		return this.name;
	}

	/**
	 * fullPath의 변형 값을 설정한다.
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 파일의 최종 수정 시간을 반환한다.
	 */
	public long getLastModifed() {
		return this.lastModified;
	}

	/**
	 * 파일의 최종 수정 시간을 설정한다.
	 */
	public void setLastModifed(long lastModified) {
		this.lastModified = lastModified;
	}

	/**
	 * 파일의 classpath 존재 여부를 반환한다.
	 */
	public boolean isClassPath() {
		return this.classPath;
	}

	/**
	 * 파일의 classpath 존재 여부를 설정한다.
	 */
	public void setClassPath(boolean classPath) {
		this.classPath = classPath;
	}
}